<?php

namespace app\common\business;

use app\common\model\mysql\SysMenu as SysMenuModel;

class SysMenu
{
    public $menuObj = null;
    public function __construct()
    {
        $this->menuObj = new SysMenuModel();
    }

    /**
     * 查询菜单列表
     * @param $where
     * @param $field
     * @param $limit
     * @param $page
     * @return array
     * @throws \think\db\exception\DbException
     */
    public function getNormalMenu($where,$field){
        $menuData = $this->menuObj->getNormalMenuList($where,$field);
        if(!$menuData){
            return [];
        }
        $menuData = $menuData->toArray();
        return $menuData;
    }

    //添加菜单数据
    public function addMenuData($data){
        //根据$parent_id,$menu_name去数据库查询是否存在这条记录
        $postNameResult = $this->getMenuByName($data['parent_id'],$data['menu_name']);
        if($postNameResult){
            throw new \think\Exception("该菜单名称已经存在请重新设置");
        }
        try {
            $this->menuObj->save($data);
        }catch (\Exception $e){
            throw new \think\Exception($e->getMessage());
        }
        return $this->menuObj->id;
    }

    public function getMenuByName($parent_id,$menu_name,$menu_id = ""){
        $user = $this->menuObj->getMenuByNameModel($parent_id,$menu_name,$menu_id);
        if(!$user){
            return [];
        }
        return $user->toArray();
    }

    //根据$id,去数据库查询是否存在这条记录
    public function getMenuById($id){
        $user = $this->menuObj->getMenuByIdFind($id);
        if(!$user){
            return [];
        }
        return $user->toArray();
    }

    /**
     * 根据主键id更新数据表中的数据
     * @param $id
     * @param $data
     * @return bool
     */
    public function updateById($id,$data){
        $id = intval($id);
        if(empty($id) || empty($data) || !is_array($data)){
            return false;
        }
        //根据$parent_id,$menu_name去数据库查询是否存在这条记录
        $postNameResult = $this->getMenuByName($data['parent_id'],$data['menu_name'],$id);
        if($postNameResult){
            throw new \think\Exception("该菜单名称已经存在请重新设置");
        }
        $where = [
            "menu_id"=>$id,
        ];
        return $this->menuObj->where($where)->find()->save($data);
    }

    //根据$ids数组，删除数据库记录delete
    public function DelMenuId($id){
        //根据$id去数据库查询是否存在下级记录
        $postResult = $this->menuObj->getMenuByParentDataModel($id);
        if($postResult){
            $menuData = $this->getMenuById($id);
            throw new \think\Exception($menuData['menu_name']."已有下级,请先删除下级");
        }
        $result = $this->menuObj->DelMenuId($id);
        return $result;
    }

    //菜单无限极分类
    public function menuTree(){
        $menuData = $this->menuObj->getMenuTree();
        if(!$menuData){
            return [];
        }
        return $menuData;
    }
}
